package cn.com.blueInfo.bpm.template.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.template.enums.AutomationRuleExecutionType;
import com.alibaba.fastjson.JSONObject;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 自动化规则表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:41:15
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "自动化规则 接收参数及校验")
public class AutomationRuleDTO extends BaseDTO {

    /** 流程模板ID */
    @NotNull(message = "流程模板ID 不能为空")
    @Schema(description = "流程模板ID")
    private Long processId;
    /** 节点ID */
    @NotNull(message = "节点ID 不能为空")
    @Schema(description = "节点ID")
    private Long nodeId;
    /** 规则编码 */
    @NotBlank(message = "规则编码 不能为空")
    @Schema(description = "规则编码")
    private String ruleCode;
    /** 规则名称 */
    @Schema(description = "规则名称")
    private String ruleName;
    /** 触发条件表达式（如 “amount <= 1000 and dept = 'IT'”） */
    @NotBlank(message = "触发条件表达式 不能为空")
    @Schema(description = "触发条件表达式（如 “amount <= 1000 and dept = 'IT'”）")
    private String conditionExpr;
    /** 执行动作类型：AUTO_PASS-自动通过，AUTO_REJECT-自动驳回，AUTO_FILL-自动填充字段 */
    @NotNull(message = "执行动作类型 不能为空")
    @Schema(description = "执行动作类型：AUTO_PASS-自动通过，AUTO_REJECT-自动驳回，AUTO_FILL-自动填充字段")
    private AutomationRuleExecutionType executionType;
    /** 执行参数（如自动填充字段：{\"field_name\": \"audit_result\", \"value\": \"通过\"}） */
    @Schema(description = "执行参数（如自动填充字段：{\"field_name\": \"audit_result\", \"value\": \"通过\"}）")
    private JSONObject executionParam;

    /**
     * 自动化规则 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "自动化规则 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 流程模板ID */
        @Schema(description = "流程模板ID")
        private Long processId;
        /** 节点ID */
        @Schema(description = "节点ID")
        private Long nodeId;
        /** 规则编码 */
        @Schema(description = "规则编码")
        private String ruleCode;
        /** 规则名称 */
        @Schema(description = "规则名称")
        private String ruleName;
        /** 触发条件表达式（如 “amount <= 1000 and dept = 'IT'”） */
        @Schema(description = "触发条件表达式（如 “amount <= 1000 and dept = 'IT'”）")
        private String conditionExpr;
        /** 执行动作类型：AUTO_PASS-自动通过，AUTO_REJECT-自动驳回，AUTO_FILL-自动填充字段 */
        @Schema(description = "执行动作类型：AUTO_PASS-自动通过，AUTO_REJECT-自动驳回，AUTO_FILL-自动填充字段")
        private AutomationRuleExecutionType executionType;
        /** 执行参数（如自动填充字段：{\"field_name\": \"audit_result\", \"value\": \"通过\"}） */
        @Schema(description = "执行参数（如自动填充字段：{\"field_name\": \"audit_result\", \"value\": \"通过\"}）")
        private JSONObject executionParam;

    }

    /**
     * 自动化规则 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "自动化规则 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {

        /** 规则名称 */
        @Schema(description = "规则名称")
        private String ruleName;
        /** 执行参数（如自动填充字段：{\"field_name\": \"audit_result\", \"value\": \"通过\"}） */
        @Schema(description = "执行参数（如自动填充字段：{\"field_name\": \"audit_result\", \"value\": \"通过\"}）")
        private JSONObject executionParam;

    }

}